home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LIBRARY / PAS_0793 / FINDBOOL.PAS < prev    next >
Pascal/Delphi Source File  |  1993-08-01  |  2KB  |  78 lines

  1. {─ Fido Pascal Conference ────────────────────────────────────────────── PASCAL ─
  2. Msg  : 405 of 417
  3. From : Rob Perelman                        1:202/1308.0         06 Jul 93  07:39
  4. To   : All
  5. Subj : Modifying EXE code
  6. ────────────────────────────────────────────────────────────────────────────────}
  7. {Here is FINDBOOL - explained in previous message (FindBool.Txt}
  8. Program FindBool;
  9.  
  10. Uses Crt, Utils;
  11.  
  12. Type AOC=Array[0..65534] of Byte;
  13.  
  14. Var F1, F2: File;
  15.     P1, P2: ^AOC;
  16.     ReadIn1, ReadIn2, Size: Word;
  17.     Location: LongInt;
  18.     RegProg: Text;
  19.     RegLoc: Boolean;
  20.  
  21. Procedure Error(Mssg: String);
  22. Begin
  23.   Writeln(Mssg);
  24.   Halt(1);
  25. End;
  26.  
  27. Begin
  28.   If ParamCount<>2 then Error('Invalid # of Parameters');
  29.   Assign(F1, ParamStr(1));
  30.   Assign(F2, ParamStr(2));
  31.   {$I-} Reset(F1, 1); Reset(F2, 1); {$I+}
  32.   If IOResult<>0 then Error('Error Opening Files');
  33.   If FileSize(F1)<>FileSize(F2) then Begin
  34.     Close(F1);
  35.     Close(F2);
  36.     Error('Files are not the same!!');
  37.   End;
  38.   Assign(RegProg, 'REGISTER.PAS');
  39.   If MaxAvail div 2>SizeOf(AOC) then Size:=SizeOf(AOC) Else Size:=MaxAvail div
  40.   GetMem(P1, Size);
  41.   GetMem(P2, Size);
  42.   Location:=0;
  43.   RegLoc:=False;
  44.   Repeat
  45.     BlockRead(F1, P1^, Size, ReadIn1);
  46.     BlockRead(F2, P2^, Size, ReadIn2);
  47.     For Location:=Location to Location+ReadIn1-1 do If Not RegLoc then
  48.       If P1^[Location]<>P2^[Location] then Begin
  49.       Rewrite(RegProg);
  50.       Writeln(RegProg, 'Program Register;');
  51.       Writeln(RegProg);
  52.       Writeln(RegProg, 'Const Toggle: Array[False..True] of Byte=(27, 0);');
  53.       Writeln(RegProg, '      RegLoc=',Location,';');
  54.       RegLoc:=True;
  55.     End;
  56.   Until (ReadIn1=0) or RegLoc;
  57.   If RegLoc then Begin
  58.     Writeln(RegProg);
  59.     Writeln(RegProg, 'Var F: File of Byte;');
  60.     Writeln(RegProg, '    Current: Byte;');
  61.     Writeln(RegProg);
  62.     Writeln(RegProg, 'Begin');
  63.     Writeln(RegProg, '  Assign(F, ParamStr(1));');
  64.     Writeln(RegProg, '  Reset(F);');
  65.     Writeln(RegProg, '  Seek(F, RegLoc);');
  66.     Writeln(RegProg, '  Read(F, Current);');
  67.     Writeln(RegProg, '  Seek(F, RegLoc);');
  68.     Writeln(RegProg, '  Write(F, Toggle[Boolean(Current)]);');
  69.     Writeln(RegProg, '  Close(F);');
  70.     Writeln(RegProg, 'End.');
  71.     Close(RegProg);
  72.     Writeln('Differences Found And REGISTER.PAS Made!!');
  73.   End Else Writeln('No Differences Found!!');
  74.   FreeMem(P1, Size);
  75.   FreeMem(P2, Size);
  76.   Close(F1);
  77.   Close(F2);
  78. End.